package com.lix.service.workflow;

import com.lix.base.BaseResult;
import com.lix.vo.workflow.req.ProcInstReq;
import com.lix.vo.workflow.req.StartReq;

import javax.servlet.http.HttpServletResponse;

/**
 * 流程实例服务接口
 */
public interface IProcessInstanceService {

    /**
     * 提交申请启动流程实例
     *
     * @param req
     * @return
     */
    BaseResult startProcess(StartReq req);

    /**
     * 撤回申请
     *
     * @param businessKey 业务id
     * @param procInstId  流程实例id
     * @param message     撤回原因
     * @return
     */
    BaseResult cancel(String businessKey, String procInstId, String message);

    /**
     * 通过 流程实例id 查询流程变量formName值，也就是获取申请表单
     *
     * @param procInstId
     * @return
     */
    BaseResult getFormNameByProcInstId(String procInstId);

    /**
     * 通过流程实例Id查询审批历史信息
     *
     * @param procInstId 流程实例id
     * @return
     */
    BaseResult getHistoryInfoList(String procInstId);

    /**
     * 获取流程实例审批历史图
     *
     * @param procInstId
     * @param response
     */
    void getHistoryProcessImage(String procInstId, HttpServletResponse response);

    /**
     * 查询正在运行中的流程实例
     *
     * @param req
     * @return
     */
    BaseResult getProcInstListRunning(ProcInstReq req);

    /**
     * 查询已结束的流程实例
     *
     * @param req
     * @return
     */
    BaseResult getProcInstFinish(ProcInstReq req);

    /**
     * 删除流程实例与历史记录
     *
     * @param procInstId
     * @return
     */
    BaseResult deleteProcInstAndHistory(String procInstId);
}
